在現代 Web 開發中,GraphQL 和 REST 是兩種常見的 API 設計風格。它們各有優勢和適用場景,理解它們的差異及應用有助於在實際項目中做出最佳選擇。
GraphQL 與 REST 的基本概念
REST(Representational State Transfer)
在實際項目中選擇 GraphQL 或 REST
選擇 GraphQL 或 REST 取決於項目的需求、團隊的技術棧以及未來的擴展性考量。
選擇 REST 的情境
選擇 GraphQL 的情境
GraphQL 的實現步驟
實現 GraphQL 涉及設計架構、定義 schema、設置服務器以及與前端集成等步驟。以下以 Node.js 為例說明實現步驟:
mkdir graphql-server
cd graphql-server
npm init -y
npm install express express-graphql graphql
// schema.js
const { buildSchema } = require('graphql');
const schema = buildSchema(`
type Query {
hello: String
user(id: ID!): User
users: [User]
}
type Mutation {
createUser(name: String!, age: Int!): User
}
type User {
id: ID
name: String
age: Int
}
`);
module.exports = schema;
// resolvers.js
const users = [
{ id: '1', name: 'Alice', age: 30 },
{ id: '2', name: 'Bob', age: 25 },
];
const root = {
hello: () => 'Hello, world!',
user: ({ id }) => users.find(user => user.id === id),
users: () => users,
createUser: ({ name, age }) => {
const newUser = { id: String(users.length + 1), name, age };
users.push(newUser);
return newUser;
},
};
module.exports = root;
// server.js
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const schema = require('./schema');
const root = require('./resolvers');
const app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true, // 開發環境下啟用 GraphiQL 界面
}));
app.listen(4000, () => {
console.log('GraphQL API server running at http://localhost:4000/graphql');
});
http://localhost:4000/graphql
,通過圖形界面測試查詢和變更操作。